import { useUserStore } from "@/stores/modules/user";
import axios, { AxiosResponse } from "axios";
import { ElMessage } from "element-plus";
const config = {
  // 默认地址请求地址，可在 .env.** 文件中修改
  baseURL: "/sisystem", //这里在vite.config中配置了跨域
  // 设置超时时间
  timeout: 500000,
  // 跨域时候允许携带凭证
  withCredentials: true,
  headers: {
    "Content-Type": "application/x-www-form-urlencoded",
  },
};

//对响应状态码的统一处理
const errorHandle = (status: number, info: string) => {
  switch (status) {
    case 400:
      ElMessage({
        message: "语义有误.",
        type: "warning",
      });
      break;
    case 401:
      ElMessage({
        message: "服务器认证失败.",
        type: "warning",
      });
      break;
    case 403:
      ElMessage({
        message: "服务器拒绝访问.",
        type: "warning",
      });
      break;
    case 404:
      ElMessage({
        message: "地址有误.",
        type: "warning",
      });
      break;
    case 500:
      ElMessage({
        message: "服务器遇到意外.",
        type: "warning",
      });
      break;
    case 502:
      ElMessage({
        message: "服务器无响应.",
        type: "warning",
      });
      break;
    default:
      ElMessage({
        message: info,
        type: "warning",
      });
      break;
  }
};
export const service = axios.create(config);

//添加一个请求拦截器
service.interceptors.request.use(
  (config: any) => {
    //在请求之前做一些事
    const userStore = useUserStore();
    const token = userStore.userInfo.token;
    config.headers["Content-Type"] = "application/json;charset=utf-8";
    if (token) {
      config.headers.Authorization = `Token ${token}`;
    }
    return config;
  },
  (error: any) => {
    //请求错误的时候做一些事
    return Promise.reject(error);
  }
);

//添加一个响应拦截器
// service.interceptors.response.use(
//   (response: AxiosResponse<any,any>) => {
//     const { data } = response;
//     // 请求失败处理
//     if (data.code == -1) {
//       ElMessage.error(data.msg);
//       return Promise.reject(`${data.msg}`);
//     } else if (data.code == -300) {
//       ElMessage.error("请求参数有误");
//       return Promise.reject(`请求参数有误`);
//     }
//     //请求成功返回
//     return data;
//   },
//   (error: any) => {
//     //对返回的错误做一些处理
//     errorHandle(error.response.status, error.message);
//     return Promise.reject(error);
//   }
// );

service.interceptors.response.use(
  (response: AxiosResponse<any, any>) => {
    const data = response;
    // 请求失败处理
    if (data.data.code == -1) {
      ElMessage.error(data.data.msg);
      return Promise.reject(`${data.data.msg}`);
    } else if (data.data.code == -300) {
      ElMessage.error("请求参数有误");
      return Promise.reject(`请求参数有误`);
    }
    //请求成功返回
    return data;
  },
  (error: any) => {
    //对返回的错误做一些处理
    errorHandle(error.response.status, error.message);
    return Promise.reject(error);
  }
);
